﻿# -*- coding:utf-8 -*-
import re, os
from ftplib import FTP

 
FTP_HOST = '192.168.1.10'      #'ftp.cwi.nl'
FTP_USER = 'ftp-user'
FTP_PASS = '123'

VERBOSE = 1


def existftp(file, (ftphost, ftpuser, ftppass), dir):
    if VERBOSE:
       print u'myftp: Устанавливается соединение с %s...' % ftphost
    try:
        connection = FTP(ftphost)
        connection.login(ftpuser, ftppass)
        connection.cwd(dir)
    except:
        print u'myftp: ОШИБКА СОЕДИНЕНИЯ С %s!' % ftphost
        return(-1)
        
    if VERBOSE:
        print u'myftp: Выполняется проверка %s...' % file
    try:
        connection.size(file)
        connection.quit()
    except:
        print u'myftp: ФАЙЛА %s НЕ НАЙДЕН' % file
        return(-2)        
    else:
        print u'myftp: файл %s присутствует' % file
   
    
    
    

def getftp(fromdir, file, (ftphost, ftpuser, ftppass), todir):
    '''
    Скачивание файла по FTP:
    
    передаются следующие параметры:
    fromdir – папка-источник на FTP-сервере
    file – имя скачиваемого файла
    (fromsite, ftpuser, ftppassword) – FTP-сервер и логин/пароль для входа
    todir – локальная папка для сохранения скачанного файла
    '''
    #olddir = os.getcwd()       # запоминается текущий каталог
    #os.chdir(todir)            # переход в папку назначения
    if VERBOSE:
       print 'myftp: Устанавливается соединение с %s...' % fromsite
    try:
        localfile = open(file, 'wb')
        connection = FTP(ftphost)
        connection.login(ftpuser, ftppass)
        connection.cwd(fromdir)
    except:
        print 'myftp: ОШИБКА СОЕДИНЕНИЯ С %s!' % ftphost
        return(-1)
    if VERBOSE:
        print 'myftp: Соединение с %s установлено.' % ftphost
    if VERBOSE:
        print 'myftp: Выполняется загрузка %s...' % file
    try:
        connection.retrbinary('RETR ' + file, localfile.write, 1024)
        connection.quit()
        localfile.close()
    except:
        print 'myftp: ОШИБКА ПОЛУЧЕНИЯ ФАЙЛА %s' % file
        return(-2)
    if VERBOSE:
        print 'myftp: Загрузка файла %s завершена.' % file

    # используем try, поскольку скачанный файл может оказаться не zip-архивом.
    # Хотя это можно было бы проверить и явно:
    try:
       readallzip(file)
    except:
       print 'myftp: %s не является архивом, помещен как есть.' % file



def putftp(fromdir, file, (ftphost, ftpuser, ftppass), todir):
    '''
    Загрузка файла по FTP на сервер:
    
    передаются следующие параметры:
    fromdir – локальная папка-источник
    file – имя отправляемого файла

    (ftphost, ftpuser, ftppass) – FTP-сервер и логин/пароль для входа
    todir – папка на FTP-сервере для загрузки файла
    
    если файл существует - то он переписывается
    '''

    if VERBOSE:
        print u'myftp: Устанавливается соединение с %s...' % ftphost
    try:
        localfile = open(file, 'rb')
        connection = FTP(ftphost)
        connection.login(ftpuser, ftppass)
        connection.cwd(todir)
    except:
        print u'myftp: ОШИБКА СОЕДИНЕНИЯ С %s' % ftphost
        return(-2)
    if VERBOSE:
        print u'myftp: Соединение с %s установлено' % ftphost
        print u'myftp: Выполняется отправка файла %s...' % file
    try:
        connection.storbinary('STOR ' + file, localfile, 1024)
        connection.quit()
        localfile.close()
    except:     
        print u'myftp: ОШИБКА ОТПРАВКИ ФАЙЛА %s!' % file
        return(-2)
    if VERBOSE:
       print u'myftp: Файл %s отправлен.' % file


#def getftpconnection (ftphost, ftpuser, ftppass):
#    connection = FTP(ftphost)
#    connection.login(ftpuser, ftppass)


def PutFTPConn(ftpconnection, fromdir, file, todir):
    '''
    Загрузка файла по FTP на сервер 
    через ftpconnection открытое ранее
    ''' 
    if ftpconnection == None:
        print u'ftpconnection == None'
        return(-1)
    try:
        localfile = open(fromdir + file, 'rb')
    except:
        print u'ОШИБКА ОТКРЫТИЯ ФАЙЛА %s' % file
        return(-2)
    try:
        ftpconnection.cwd(todir)
        ftpconnection.storbinary('STOR ' + file, localfile, 1024)
        localfile.close()
    except:     
        print u'ОШИБКА ОТПРАВКИ ФАЙЛА %s!' % file
        return(-2)        
        
        
   

def ExistFTPConn(ftpconnection, file, dir):
    '''
    Загрузка файла по FTP на сервер 
    через ftpconnection открытое ранее
    ''' 
    if ftpconnection == None:
        print u'ftpconnection == None'
        return(-1)
    try:
        ftpconnection.cwd(dir)
        ftpconnection.size(file)
    except:
        #print u'myftp: ФАЙЛ %s НЕ НАЙДЕН' % file
        pass
    else:
        #print u'myftp: файл %s присутствует' % file
        return(-2) 
        
        
def DeleteFTPConn(ftpconnection, file, dir):        
    '''
    Удаление файла на FTP сервере
    через открытое ранее ftpconnection
    ''' 
    if ftpconnection == None:
        print u'ftpconnection == None'
        return(-1)
        
    try:
        ftpconnection.cwd(dir)
        ftpconnection.delete(file)
    except:
        print u'ОШИБКА УДАЛЕНИЯ ФАЙЛА %s!' % file
        return(-2)       
        
        
        
        

def _main():
    
    try:
        connection = FTP(FTP_HOST)
        connection.login(FTP_USER, FTP_PASS)
    except:
        print u'ОШИБКА СОЕДИНЕНИЯ С %s' % ftphost
        return(-1)
        
    if ExistFTPConn(connection, 'test.xml','/test'):
        DeleteFTPConn(connection, 'test.xml','/test')
    

    if ExistFTPConn(connection, 'test.xml','/test'):
        print u'ОШИБКА! Файл уже существует'
    else:
        if PutFTPConn(connection,'D:/srv/www/django/ktit/echo/doc/ftp/','test.xml','/test'):
            print u'Ошибка передачи FTP'

        
    connection.quit()    
    
   


  
if __name__=="__main__":
    _main()
    
    
        #putftp('D:\srv\www\django\ktit\echo\doc\ftp','test.xml',(FTP_HOST,FTP_USER,FTP_PASS),'/test')
    #ftp = FTP(FTP_HOST)   # connect to host, default port
    #ftp.login(FTP_USER, FTP_PASS)               # user anonymous, passwd anonymous@
    #ftp.retrlines('LIST')     # list directory contents

    
    #orig_str = "empl_id_responsible_wer"
    #orig_str ="2342"
    #str = orig_str.replace('empl_id_', '')
    #result = re.search(r'(.*)_(\d+)', str)
    #print "%s;  %s;  %s;  %s;" % (orig_str, str, result.group(), result.group())